/**
 * 权限验证工具函数
 */

import { getToken, parseToken, isTokenExpired } from '@/utils/token'

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否已登录
 */
export function isAuthenticated() {
  const token = getToken()
  if (!token) return false

  // 检查令牌是否过期
  return !isTokenExpired(token)
}

/**
 * 获取当前用户角色
 * @returns {string|null} 用户角色
 */
export function getCurrentUserRole() {
  const token = getToken()
  if (!token) return null

  const payload = parseToken(token)
  return payload ? payload.role : null
}

/**
 * 检查用户是否具有指定角色
 * @param {string|array} roles 需要检查的角色
 * @returns {boolean} 是否具有指定角色
 */
export function hasRole(roles) {
  const userRole = getCurrentUserRole()
  if (!userRole) return false

  if (typeof roles === 'string') {
    return userRole === roles
  }

  if (Array.isArray(roles)) {
    return roles.includes(userRole)
  }

  return false
}

/**
 * 检查是否为管理员
 * @returns {boolean} 是否为管理员
 */
export function isAdmin() {
  return hasRole('admin')
}

/**
 * 检查是否为普通用户
 * @returns {boolean} 是否为普通用户
 */
export function isUser() {
  return hasRole('user')
}

/**
 * 路由守卫 - 检查是否需要认证
 * @param {Object} to 目标路由
 * @param {Object} from 来源路由
 * @param {Function} next 导航函数
 */
export function checkAuth(to, from, next) {
  // 检查路由是否需要认证
  const requiresAuth = to.matched.some(record => record.meta.requiresAuth)

  if (requiresAuth && !isAuthenticated()) {
    // 需要认证但未登录，重定向到登录页
    next('/login')
  } else {
    // 已登录或不需要认证，允许访问
    next()
  }
}

/**
 * 路由守卫 - 检查角色权限
 * @param {Object} to 目标路由
 * @param {Object} from 来源路由
 * @param {Function} next 导航函数
 */
export function checkRole(to, from, next) {
  // 检查路由是否需要特定角色
  const requiredRole = to.meta.role

  if (requiredRole && !hasRole(requiredRole)) {
    // 需要特定角色但不匹配，重定向到403页面
    next('/403')
  } else {
    // 角色匹配或不需要特定角色，允许访问
    next()
  }
}

export default {
  isAuthenticated,
  getCurrentUserRole,
  hasRole,
  isAdmin,
  isUser,
  checkAuth,
  checkRole
}
